package com.kun.companion.core.http.response;

import java.io.Serializable;
import java.util.List;

/**
 * DeepSeek服务API接口响应参数
 *
 * @author gzc
 * @since 2025/3/1
 **/
public class DeepSeekResponse implements Serializable {

    /**
     * 响应的唯一标识符。
     */
    private String id;

    /**
     * 响应的对象类型。
     */
    private String object;

    /**
     * 响应创建的时间戳。
     */
    private long created;

    /**
     * 使用的模型名称。
     */
    private String model;

    /**
     * 响应中的选择列表。
     */
    private List<Choice> choices;

    /**
     * 令牌使用情况。
     */
    private Usage usage;

    /**
     * 系统指纹。
     */
    private String systemFingerprint;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getObject() {
        return object;
    }

    public void setObject(String object) {
        this.object = object;
    }

    public long getCreated() {
        return created;
    }

    public void setCreated(long created) {
        this.created = created;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public List<Choice> getChoices() {
        return choices;
    }

    public void setChoices(List<Choice> choices) {
        this.choices = choices;
    }

    public Usage getUsage() {
        return usage;
    }

    public void setUsage(Usage usage) {
        this.usage = usage;
    }

    public String getSystemFingerprint() {
        return systemFingerprint;
    }

    public void setSystemFingerprint(String systemFingerprint) {
        this.systemFingerprint = systemFingerprint;
    }

    /**
     * 表示响应中的一个选择项。
     */
    public static class Choice {
        /**
         * 选择项的索引。
         */
        private int index;

        /**
         * 选择项中的消息。
         */
        private Message message;

        /**
         * 选择项的对数概率（logprobs），可能为 null。
         */
        private Object logprobs;

        /**
         * 选择项的完成原因。
         */
        private String finishReason;

        public int getIndex() {
            return index;
        }

        public void setIndex(int index) {
            this.index = index;
        }

        public Message getMessage() {
            return message;
        }

        public void setMessage(Message message) {
            this.message = message;
        }

        public Object getLogprobs() {
            return logprobs;
        }

        public void setLogprobs(Object logprobs) {
            this.logprobs = logprobs;
        }

        public String getFinishReason() {
            return finishReason;
        }

        public void setFinishReason(String finishReason) {
            this.finishReason = finishReason;
        }
    }

    /**
     * 表示消息对象。
     */
    public static class Message {
        /**
         * 消息的角色（如 "assistant" 或 "user"）。
         */
        private String role;

        /**
         * 消息的内容。
         */
        private String content;

        public String getRole() {
            return role;
        }

        public void setRole(String role) {
            this.role = role;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }
    }

    /**
     * 表示令牌使用情况。
     */
    public static class Usage {
        /**
         * 提示令牌的数量。
         */
        private int promptTokens;

        /**
         * 完成令牌的数量。
         */
        private int completionTokens;

        /**
         * 总令牌数量。
         */
        private int totalTokens;

        /**
         * 提示缓存命中的令牌数量。
         */
        private int promptCacheHitTokens;

        /**
         * 提示缓存未命中的令牌数量。
         */
        private int promptCacheMissTokens;

        public int getPromptTokens() {
            return promptTokens;
        }

        public void setPromptTokens(int promptTokens) {
            this.promptTokens = promptTokens;
        }

        public int getCompletionTokens() {
            return completionTokens;
        }

        public void setCompletionTokens(int completionTokens) {
            this.completionTokens = completionTokens;
        }

        public int getTotalTokens() {
            return totalTokens;
        }

        public void setTotalTokens(int totalTokens) {
            this.totalTokens = totalTokens;
        }

        public int getPromptCacheHitTokens() {
            return promptCacheHitTokens;
        }

        public void setPromptCacheHitTokens(int promptCacheHitTokens) {
            this.promptCacheHitTokens = promptCacheHitTokens;
        }

        public int getPromptCacheMissTokens() {
            return promptCacheMissTokens;
        }

        public void setPromptCacheMissTokens(int promptCacheMissTokens) {
            this.promptCacheMissTokens = promptCacheMissTokens;
        }
    }
}
